#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,q,pd,x,y,z,zb,jz;

struct data
{
	int bh,v;
}; data b[8006],a[8008];
bool cmd(data a_x,data b_y)
{
	if(a_x.v==b_y.v) return a_x.bh<b_y.bh;
	else return a_x.v<b_y.v;
}
void find(int x,int y)
{
	zb=jz=-1;
	for(int i=1; i<=n; i++)
	{
		if(a[i].bh==x)
		{
			zb=i;	jz=a[i].v;
		//	cout<<zb<<' '<<jz<<endl;
		}		
		if(zb!=-1)
		{
			a[i].v=a[i+1].v;
			a[i].bh=a[i+1].bh;
		}
	}
	zb=x;
}
void chang(int x,int y)
{
	int l=1,r=n-1;
	while(l+1<r)
	{
		int mid=(l+r)/2;
		if(a[mid].v<y) l=mid;
		else r=mid;
	 } 
	 int ll=1,rr=n-1;
	 while(ll+1<rr)
	 {
	 	int mid=(ll+rr)/2;
	 	if(a[mid].v<=y) ll=mid;
	 	else rr=mid;
	 }
//	 cout<<r<<endl;
	int gs=r-ll+1;
	 r-=1;
	 //int gs=0;
	 if(a[r].v==y) gs++;
	 for(int i=n; i>=r+1; i--)
	 {
	 	if(a[i].v==y) gs++;
	 //	cout<<a[i].v<<' '<<y<<endl;
	 	a[i].bh=a[i-1].bh;
	 	a[i].v=a[i-1].v;
	 }
	 a[r].bh=x,a[r].v=y;
	// for(int i=1; i<=n; i++) 
//	 cout<<n<<' '<<r+gs<<endl;
	 sort(a+1,a+1+n,cmd);
}
int main()
{
	freopen("sort.in","r",stdin);
	freopen("sort.out","w",stdout);
	scanf("%d%d",&n,&q);
	for(int i=1; i<=n; i++) 
	{
		scanf("%d",&a[i].v);
		a[i].bh=i;
	}
	sort(a+1,a+1+n,cmd);
	for(int i=1; i<=q; i++)
	{
		scanf("%d",&pd);
		if(pd==1)
		{
			scanf("%d%d",&x,&y);
	//		for(int j=1; j<=n; j++)
	//		{
	//			cout<<a[j].v<<' ';
	//		}
	//		cout<<endl;
	////		for(int j=1; j<=n; j++)
	//		{
	//			cout<<a[j].bh<<' ';
	//		}
	//		cout<<endl;
			find(x,y);
			chang(zb,y);
	//		for(int j=1; j<=n+1; j++)
	//		{
	//			cout<<a[j].v<<' ';
	//		}
	//		cout<<endl;
	//		for(int j=1; j<=n+1; j++)
	//		{
	//			cout<<a[j].bh<<' ';
		//	}
	//		cout<<endl;
		}
		else
		{
			scanf("%d",&z);
			for(int j=1; j<=n; j++)
			{
				if(a[j].bh==z) printf("%d\n",j);
			}
		}
	}
	return 0;
}
